package com.gles.framework;

import scene.manager.SceneManager;
import device.graphics.GraphicsDevice;
import device.input.InputDevice;
import frame.FrameTimer;

/**
 * アプリケーションの実行クラス
 *
 * @author function
 */
public class GameMain
{
	/** フレーム制御用 */
	private FrameTimer		m_frameTiemr;

	/** シーン管理クラス */
	private SceneManager	m_sceneManager;



	/**
	 * コンストラクタ
	 *
	 * @param mediator Activityの仲介者
	 */
	public GameMain( ActivityMediator mediator )
	{
		m_frameTiemr = new FrameTimer();

		m_sceneManager = new SceneManager( mediator );
	}

	/**
	 * 初期化
	 */
	public void initialize()
	{
		// シーン管理クラスの初期化
		m_sceneManager.initialize();
	}

    /**
     * ゲーム更新・描画処理
     *
     * @param inputDevice 		入力デバイス
     * @param m_graphicsDevice	グラフィックデバイス
     */
	public void gameTask( InputDevice inputDevice, GraphicsDevice m_graphicsDevice )
	{
		try
		{
			// シーンを更新
			m_sceneManager.sceneUpdate( inputDevice );

			// 描画の開始
			m_graphicsDevice.begin();

			// シーンの描画
			m_sceneManager.sceneDraw( m_graphicsDevice );

			// 描画の終了
			m_graphicsDevice.end();

			// シーンを変更するかどうか
			if( m_sceneManager.isSceneChange() )
			{
				// シーン変更
				m_sceneManager.sceneChange();
			}



			m_frameTiemr.update();


		}
		catch( Exception e )
		{
			// 強制終了のためにここで落とす
			throw new RuntimeException( e );
		}
	}

	/**
	 * 終了処理
	 */
	public void finish()
	{

	}


}